/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package otcapp.controlador;

import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import otcapp.controlador.jinternalFrame.InternosPantalla;
import otcapp.controlador.modelocombobox.ModeloComboDepartamento;
import otcapp.controlador.modelocombobox.ModeloComboLocalidad;
import otcapp.controlador.seguridadDecoradores.FabricaContrladores;
import otcapp.dto.InternoDTO;
import otcapp.experto.ExpertoIngresarInterno;
import otcapp.experto.excepciones.ExpertoInternoException;
import otcapp.fabricas.FabricaExpertos;

/**
 *
 * @author diego
 */
public class IngresarInternoControlador implements Controlador {

    private InternosPantalla pantalla;
    private ExpertoIngresarInterno expertoIngresarInterno;
    private InternoDTO ultimoInternoGuardado;
    private boolean retornoIngresarPieza;

    public IngresarInternoControlador() {
        pantalla = new InternosPantalla();
        expertoIngresarInterno = (ExpertoIngresarInterno) FabricaExpertos.getInstancia().getExperto(FabricaExpertos.expertos.INGRESAR_INTERNO);

        pantalla.getCabeceraJPanel().getTítulo().setText("Agregar Interno/a");
        pantalla.getCabeceraJPanel().getIcono().setIcon(new ImageIcon(this.getClass().getResource("../utiles/imagenes/iconos/People-48.png").getPath()));

        pantalla.getBtnGuardarInterno().addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                guardarInterno();
            }
        });

        pantalla.getBtnSalir().addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                finalizar();
            }
        });

        pantalla.getCbxLocalidad().addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                if (pantalla.getCbxLocalidad().getSelectedIndex() > 0) {
                    String depto = ((ModeloComboLocalidad) pantalla.getCbxLocalidad().getModel()).getLocalidadSeleccionada().getDepartamento().getNombreDepartamento();
                    pantalla.getCbxDepartamento().setSelectedItem(depto);
                }
            }
        });
    }

    public boolean isRetornoIngresarPieza() {
        return retornoIngresarPieza;
    }

    public void setRetornoIngresarPieza(boolean retornoIngresarPieza) {
        this.retornoIngresarPieza = retornoIngresarPieza;
    }

    @Override
    public void iniciar() {
        pantalla.setVisible(true);
        pantalla.getCbxLocalidad().setModel(new ModeloComboLocalidad(expertoIngresarInterno.buscarLocalidades()));
        pantalla.getCbxDepartamento().setModel(new ModeloComboDepartamento(expertoIngresarInterno.buscarDepartamentos()));
    }

    @Override
    public void finalizar() {
        pantalla.setVisible(false);
        
    }

    @Override
    public Component getPantalla() {
        return pantalla;
    }

    @Override
    public void continuar() {
        pantalla.setVisible(true);
    }

    public void guardarInterno() {
        try {
            ultimoInternoGuardado = recolectarDatosPantalla();
            expertoIngresarInterno.guardarInterno(ultimoInternoGuardado);
        } catch (ExpertoInternoException ex) {
            JOptionPane.showMessageDialog(pantalla, ex.getMessage(), "ERROR", JOptionPane.ERROR_MESSAGE);
        }
        JOptionPane.showMessageDialog(pantalla, "Interno guardado Correctamente", "INFORMACIÓN", JOptionPane.INFORMATION_MESSAGE);
        limpiarCampos();
        /*
         * Luego de guardar el interno pregunta si tiene que regresar a algún otro contrlador
         */
        if (retornoIngresarPieza) {
            pantalla.setVisible(false);
            retornoIngresarPieza = false;
            ((ControladorPrincipal)FabricaContrladores.getInstancia().getControlador(FabricaContrladores.controlador.PRINCIPAL)).iniciarContrlador(ControladorPrincipal.controlador.INGRESAR_PIEZA);
        }
    }

    private InternoDTO recolectarDatosPantalla() {
        InternoDTO dto = new InternoDTO();

        dto.setApellido(pantalla.getTxtApellido().getText());
        dto.setBarrio(pantalla.getTxtBarrio().getText());
        dto.setCalle(pantalla.getTxtCalle().getText());
        dto.setCasa(pantalla.getTxtCasa().getText());
        dto.setLocalidad(((ModeloComboLocalidad) pantalla.getCbxLocalidad().getModel()).getLocalidadSeleccionada());
        dto.setDni(pantalla.getTxtDNI().getText());
        dto.setManzana(pantalla.getTxtManzana().getText());
        dto.setMonoblock(pantalla.getTxtMonoblock().getText());
        dto.setNombre(pantalla.getTxtNombre().getText());
        dto.setNro(pantalla.getTxtNro().getText());
        dto.setPiso(pantalla.getTxtPiso().getText());
        dto.setTelefonoDom(pantalla.getTxtTelefonoDom().getText());
        dto.setSexo(pantalla.getCbxSexo().getSelectedItem().toString());

        return dto;
    }

    private void limpiarCampos() {
        pantalla.getTxtApellido().setText("");
        pantalla.getTxtBarrio().setText("");
        pantalla.getTxtCalle().setText("");
        pantalla.getTxtCasa().setText("");
        pantalla.getCbxLocalidad().setSelectedIndex(0);
        pantalla.getCbxSexo().setSelectedIndex(0);
        pantalla.getTxtDNI().setText("");
        pantalla.getTxtManzana().setText("");
        pantalla.getTxtMonoblock().setText("");
        pantalla.getTxtNombre().setText("");
        pantalla.getTxtNro().setText("");
        pantalla.getTxtPiso().setText("");
        pantalla.getTxtTelefonoDom().setText("");

    }

    public InternoDTO getUltimoInternoGuardado() {
        return ultimoInternoGuardado;
    }
}
